const webpack = require('webpack');
const plugins = [];

if (process.env.UNI_OPT_TREESHAKINGNG) {
	plugins.push(
		require('@dcloudio/vue-cli-plugin-uni-optimize/packages/babel-plugin-uni-api/index.js')
	);
}

if (
	(process.env.UNI_PLATFORM === 'app-plus' && process.env.UNI_USING_V8) ||
	(process.env.UNI_PLATFORM === 'h5' && process.env.UNI_H5_BROWSER === 'builtin')
) {
	const path = require('path');

	const isWin = /^win/.test(process.platform);

	const normalizePath = (path) => (isWin ? path.replace(/\\/g, '/') : path);

	const input = normalizePath(process.env.UNI_INPUT_DIR);
	try {
		plugins.push([
			require('@dcloudio/vue-cli-plugin-hbuilderx/packages/babel-plugin-console'),
			{
				file(file) {
					file = normalizePath(file);
					if (file.indexOf(input) === 0) {
						return path.relative(input, file);
					}
					return false;
				},
			},
		]);
	} catch (e) {}
}

process.UNI_LIBRARIES = process.UNI_LIBRARIES || ['@dcloudio/uni-ui'];
process.UNI_LIBRARIES.forEach((libraryName) => {
	plugins.push([
		'import',
		{
			libraryName: libraryName,
			customName: (name) => {
				return `${libraryName}/lib/${name}/${name}`;
			},
		},
	]);
});

if (process.env.UNI_PLATFORM !== 'h5') {
	plugins.push('@babel/plugin-transform-runtime');
}

const config = {
	presets: [
		[
			'@vue/app',
			{
				modules: webpack.version[0] > 4 ? 'auto' : 'commonjs',
				useBuiltIns: process.env.UNI_PLATFORM === 'h5' ? 'usage' : 'entry',
			},
		],
	],
	plugins,
};

const UNI_H5_TEST = '**/@dcloudio/uni-h5/dist/index.umd.min.js';
if (process.env.NODE_ENV === 'production') {
	config.overrides = [
		{
			test: UNI_H5_TEST,
			compact: true,
		},
	];
} else {
	config.ignore = [UNI_H5_TEST];
}

module.exports = config;
